package com.taomeng.service.impl;

import com.taomeng.dao.PermissionDao;
import com.taomeng.dao.RoleDao;
import com.taomeng.entity.PageBean;
import com.taomeng.entity.PerDTree;
import com.taomeng.entity.Role;
import com.taomeng.service.PermissionService;
import com.taomeng.service.RoleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

@Transactional
@Service
public class RoleServiceImpl implements RoleService {
    @Autowired
    private RoleDao roleDao;
    @Autowired
    private PermissionDao permissionDao;

    @Override
    public PageBean<Role> findByPage(String page, String limit) {
        PageBean<Role> bean = roleDao.findByPage(page, limit);
        return bean;

    }

    @Override
    public List<Role> findRolesByLoginUserId(Long id) {
        return roleDao.findRoleByUserId(id);
    }

    @Override
    public boolean updatePermission(String roleId, String[] pers) {
        //旧权限集
        List<PerDTree> perDTrees = permissionDao.findPermissionByRoleId(roleId);
        //转换为集合，方便操作
        List<String> list = new ArrayList<>(Arrays.asList(pers));   //Arrays.asList() 返回的市Arrays的内部类ArrayList， 而不是java.util.ArrayList
        try {
            //如果旧权限集有这个权限，就删除这个权限，如果没有这个权限就添加这个权限
            for (PerDTree perDTree : perDTrees) {
                for (int i = 0; i < list.size(); i++) {
                    if (perDTree.getId().equals(list.get(i))) {
                        permissionDao.delPermByRoleId(roleId, list.get(i));//代表这个权限被修改了，需要删除他
                        //删除这个权限后，把集合中的也删除。直到遍历完了集合中剩下的就是需要插入的添加的权限
                        list.remove(i);
                        break;
                    }
                }
            }
            //剩下的需要插入的权限
            return null != permissionDao.batchAddPermission(roleId, list);

        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

    @Override
    public boolean add(Role role) {
        return roleDao.add(role);
    }

    @Override
    public boolean delRoleById(Long id) {
        List list = roleDao.findUsersByRoleId(id);
        if(list.size()!=0) return false;
        if (permissionDao.delAllPermByRoleId(id)) {
            return roleDao.delById(id);
        }
        return false;
    }
}
